﻿#pragma once
#ifndef WREVENTHANDLERS_H
#define WREVENTHANDLERS_H

#include "../Structs/WRObservers.h"
#include "WREventSource.h"

//表示事件处理器集合。
template <class T>
class WREventHandlers : public WRObservers<WREventHandler>, public WREventSource
{
public:
    //当事件产生后调用此方法。
    void doProcess(const T& value)
    {
        QMutexLocker lock(&m_mutex);
        for(WRu i = 0; i < m_count; ++i)
        {
            m_array[i]->doProcess(&value);
        }
    }
    //当事件产生后调用此方法。
    void doProcess(const T* value)
    {
        QMutexLocker lock(&m_mutex);
        for(WRu i = 0; i < m_count; ++i)
        {
            m_array[i]->doProcess(value);
        }
    }

private:
    //添加事件处理者。
    void addHandler(WREventHandler* handler)
    {
        add(handler);
    }
    //移除事件处理者。
    bool removeHandler(WREventHandler* handler)
    {
        return remove(handler);
    }
};

#endif // WREVENTHANDLERS_H

